library(shiny)
Warning: package ‘shiny’ was built under R version 4.1.2
library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
method from
print.tbl_lazy
print.tbl_sql
-- Attaching packages -------------------------------------------------------------------------------------------------------------------------------------------- tidyverse 1.3.1 --
v ggplot2 3.3.5 v purrr 0.3.4
v tibble 3.1.5 v dplyr 1.0.7
v tidyr 1.1.4 v stringr 1.4.0
v readr 2.0.2 v forcats 0.5.1
-- Conflicts ----------------------------------------------------------------------------------------------------------------------------------------------- tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag() masks stats::lag()
library(shinythemes)
Warning: package ‘shinythemes’ was built under R version 4.1.2
library(stringi)
library(RColorBrewer)
seabirds_cleaned_data <- read_csv("clean_data/seabirds_cleaned_data.csv")
Rows: 49020 Columns: 52
-- Column specification -------------------------------------------------------------------------------------------------------------------------------------------------------------
Delimiter: ","
chr (19): common_name, scientific_name, species_abbreviation, age, plphase, feeding, on_water, on_ice, on_ship, in_hand, fly_by, group_sighting, ship_wake, molting, nat_feeding...
dbl (28): record_x, record_id, wanplum, total_sighting, num_feeding, num_on_water, num_on_ice, num_fly_by, num_group_sighting, num_ship_wake, record_y, lat, long, ship_activity...
lgl (3): sex, air_temp, salinity
dttm (2): date, time
i Use `spec()` to retrieve the full column specification for this data.
i Specify the column types or set `show_col_types = FALSE` to quiet this message.
birds_21 <- seabirds_cleaned_data %>%
mutate(bird_type = case_when(
str_detect(common_name,
regex("shearwater",
ignore_case = TRUE)) ~ "Shearwater",
str_detect(common_name,
regex("albatross",
ignore_case = TRUE)) ~ "Albatross",
str_detect(common_name,
regex("mollymawk",
ignore_case = TRUE)) ~ "Mollymawk",
str_detect(common_name,
regex("petrel",
ignore_case = TRUE)) ~ "Petrel",
str_detect(common_name,
regex("prion",
ignore_case = TRUE)) ~ "Prion",
str_detect(common_name,
regex("skua",
ignore_case = TRUE)) ~ "Skua",
str_detect(common_name,
regex("penguin",
ignore_case = TRUE)) ~ "Penguin",
str_detect(common_name,
regex("tropicbird",
ignore_case = TRUE)) ~ "Tropicbird",
str_detect(common_name,
regex("noddy",
ignore_case = TRUE)) ~ "Noddy",
str_detect(common_name,
regex("tern",
ignore_case = TRUE)) ~ "Tern",
str_detect(common_name,
regex("gull",
ignore_case = TRUE)) ~ "Gull",
str_detect(common_name,
regex("booby",
ignore_case = TRUE)) ~ "Booby",
str_detect(common_name,
regex("frigatebird",
ignore_case = TRUE)) ~ "Frigatebird",
str_detect(common_name,
regex("shag",
ignore_case = TRUE)) ~ "Shag",
str_detect(common_name,
regex("sheathbill",
ignore_case = TRUE)) ~ "Sheathbill",
str_detect(common_name,
regex("fulmar",
ignore_case = TRUE)) ~ "Fulmar",
str_detect(common_name,
regex("gannet",
ignore_case = TRUE)) ~ "Gannet",
str_detect(common_name,
regex("cormorant",
ignore_case = TRUE)) ~ "Cormorant",
str_detect(common_name,
regex("procellaria",
ignore_case = TRUE)) ~ "Procellaria",
TRUE ~ common_name))
birds_21
birds_21 %>%
arrange(date)
# https://r-charts.com/color-palette-generator/
# https://www.statology.org/color-by-factor-ggplot2/
birds_pal <- c("#50e2ea", "#4edae5", "#4bd2df", "#49cada", "#47c2d4",
"#45bbcf", "#42b3c9", "#40abc4", "#3ea3be", "#3b9bb9",
"#3993b3", "#378bae", "#3483a8", "#327ba3", "#30739d",
"#2e6c98", "#2b6492", "#295c8d", "#275487", "#244c82", "#22447c")
names(birds_pal) <- levels(birds_21$bird_type)
custom_colors <- scale_colour_manual(values = birds_pal)
birds <- c("Tropicbird" = "#50e2ea", "Tern" = "#4edae5", "Skua" = "#4bd2df",
"Sheathbill" = "#49cada", "Shearwater" = "#47c2d4",
"Shag" = "#45bbcf", "Seabird" = "#42b3c9", "Procellaria" = "#40abc4",
"Prion" = "#3ea3be", "Petrel" = "#3b9bb9", "Penguin" = "#3993b3",
"Noddy" = "#378bae", "Mollymawk" = "#3483a8", "Jaeger" = "#327ba3",
"Gull" = "#30739d", "Gannet" = "#2e6c98", "Fulmar" = "#2b6492",
"Frigatebird" = "#295c8d", "Cormorant" = "#275487",
"Booby" = "#244c82", "Albatross" = "#22447c")
Jaeger Seabird
```r
birds_9 %>%
filter(!is.na(bird_type)) %>%
count(bird_type)
NA
<!-- rnb-source-end -->
<!-- rnb-frame-begin eyJtZXRhZGF0YSI6eyJjbGFzc2VzIjpbInNwZWNfdGJsX2RmIiwidGJsX2RmIiwidGJsIiwiZGF0YS5mcmFtZSJdLCJucm93IjoyMSwibmNvbCI6Miwic3VtbWFyeSI6eyJBIHRpYmJsZSI6IjIxIHggMiJ9fSwicmRmIjoiSDRzSUFBQUFBQUFBQmwxU3pXcmJRQkFlSzFLQ0ZCSUNKYVNIM251eUlXbExUeTBrS1E0VVVrU2RRbTVsSkcxdDRmV3VHYTF3Zld1ZklPZGVldXQ3OUgzNkRuRm5sUjFqSkJqTnpEZi9PL1A1dy8ycjdENERnRDJJQndQWVMxaUUvZXY4L09MTkJVQWNzVGFBR0ZMUHY3UFhNeFk4ZU1KMEdnenBwUzdRa1cyYUFDUlgxaFpyc1Y1YldsaEM0d0p3T0taNmlrNFZOVlVCMmgrM2VvRWsyZzBhbzhROXZtbTFGc3RIVkZNbGZ1bXQxWHE5d05WYzZuNnlWU1YxRDNKbHBtMXRKRFJYanBRa1NuS3FyWmdPYzdLbDBocXBSZ21lS056cEw1N01jQnJrYkRKVFNDc2VnSFlSTnl2cWJaL3haTjVLcXZoT2tWVEs3c2d1NjdMTERIRFV2U0c4dTJSKzV1ZnhiVEw5WWZiQTZudVdYd0FjM3pKL3lUUUdlTXZ2bnY0S08vRDBCZUQ1VHo4RHEzOTVQNzlaSHZZV2x4aGNxQ1lzTFpMSDgwMThkZXVsa3ZXYVhsaEtkaldTVU45cjlJTi9tODNtWHo5L3FiR1IvQUptRlRvY2ZTT09aKzJ4RjNKZ2w0NFh3RUdSdjZpa0Z6eWdIbkRTR3Q5Sk5TeG5yWmtQWDUvN0NwMzk2VHNLOHVtT0hEM1ZqRFloVnlLWHdIZFJHeGs3MFZoc3orS1lSKzRtSGkycDNoNXN4bWd6Y3RhaCtHV2wxWUowdzhIamYxVlhNRXBLQXdBQSJ9 -->
<div data-pagedtable="false">
<script data-pagedtable-source type="application/json">
{"columns":[{"label":["bird_type"],"name":[1],"type":["chr"],"align":["left"]},{"label":["n"],"name":[2],"type":["int"],"align":["right"]}],"data":[{"1":"Albatross","2":"15681"},{"1":"Booby","2":"23"},{"1":"Cormorant","2":"9"},{"1":"Frigatebird","2":"6"},{"1":"Fulmar","2":"165"},{"1":"Gannet","2":"1679"},{"1":"Gull","2":"2366"},{"1":"Jaeger","2":"28"},{"1":"Mollymawk","2":"3661"},{"1":"Noddy","2":"39"},{"1":"Penguin","2":"70"},{"1":"Petrel","2":"14096"},{"1":"Prion","2":"2457"},{"1":"Procellaria","2":"2"},{"1":"Seabird","2":"2"},{"1":"Shag","2":"85"},{"1":"Shearwater","2":"6273"},{"1":"Sheathbill","2":"11"},{"1":"Skua","2":"704"},{"1":"Tern","2":"926"},{"1":"Tropicbird","2":"45"}],"options":{"columns":{"min":{},"max":[10],"total":[2]},"rows":{"min":[10],"max":[10],"total":[21]},"pages":{}}}
</script>
</div>
<!-- rnb-frame-end -->
<!-- rnb-chunk-end -->
<!-- rnb-text-begin -->
<!-- rnb-text-end -->
<!-- rnb-chunk-begin -->
<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuc2lnaHRpbmcgPC0gIGJpcmRzXzIxICU+JSBcbiAgICAgICAgICAgIGZpbHRlcighaXMubmEoYmlyZF90eXBlKSkgJT4lIFxuICAgICAgICAgICAgZ3JvdXBfYnkoYmlyZF90eXBlKSAlPiUgXG4gICAgICAgICAgICBzdW1tYXJpc2UoY291bnQgPSBzdW0odG90YWxfc2lnaHRpbmcsIG5hLnJtID0gVFJVRSkpICU+JVxuICAgICAgICAgICAgbXV0YXRlKHNpZ2h0aW5nX2lkID0gcm93X251bWJlcigpKVxuXG5zaWdodGluZyAlPiUgXG4gICAgZ2dwbG90KCkgK1xuICAgIGFlcyh5ID0gYmlyZF90eXBlLCBcbiAgICAgICAgeCA9IGNvdW50LCBmaWxsID0gYmlyZF90eXBlKSArXG4gICAgZ2VvbV9jb2woY29sb3VyID0gXFxibGFja1xcKSArXG4gICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gXFxub25lXFwpICtcbiAgICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gYygxLCA1LCAxMCwgMTAwMCwgNjAwMCwgMTQwMDAwMCksXG4gICAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoMSwxNDAwMDAwKSwgXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zID0gXFxsb2cxMFxcKSArXG4gICAgbGFicyh5ID0gXFxcXG4gQmlyZCBOYW1lc1xcLFxuICAgICAgICAgeCA9IFxcTnVtYmVyIG9mIEJpcmRzIFNlZW4gXFxuIExvZzEwIHNjYWxlXFwpICtcbiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBiaXJkcylcbmBgYFxuYGBgIn0= -->
```r
```r
sighting <- birds_21 %>%
filter(!is.na(bird_type)) %>%
group_by(bird_type) %>%
summarise(count = sum(total_sighting, na.rm = TRUE)) %>%
mutate(sighting_id = row_number())
sighting %>%
ggplot() +
aes(y = bird_type,
x = count, fill = bird_type) +
geom_col(colour = \black\) +
theme(legend.position = \none\) +
scale_x_continuous(breaks = c(1, 5, 10, 1000, 6000, 1400000),
limits = c(1,1400000),
trans = \log10\) +
labs(y = \\n Bird Names\,
x = \Number of Birds Seen \n Log10 scale\) +
scale_fill_manual(values = birds)
<!-- rnb-source-end -->
<!-- rnb-plot-begin -->
<img src="data:image/png;base64,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" />
<!-- rnb-plot-end -->
<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuXG4jIGxvZzEwKCkgYXMgMSBvciBtb3JlIGJpcmRzIGFyZSBsZXNzIHRoYW4gMTAgYW5kIGRvbid0IHNob3cgb24gbm9ybWFsIGdyYXBoXG5gYGBcbmBgYCJ9 -->
```r
```r
# log10() as 1 or more birds are less than 10 and don't show on normal graph
<!-- rnb-source-end -->
<!-- rnb-chunk-end -->
<!-- rnb-text-begin -->
1,394,468
<!-- rnb-text-end -->
<!-- rnb-chunk-begin -->
<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuZmVlZGluZyA8LSAgYmlyZHNfMjEgJT4lIFxuICAgICAgICAgICAgICBncm91cF9ieShiaXJkX3R5cGUpICU+JSBcbiAgICAgICAgICAgICAgZmlsdGVyKHN0cl9kZXRlY3QoZmVlZGluZywgXFxZRVNcXCkpICU+JSBcbiAgICAgICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUgXG4gICAgICAgICAgICAgIG11dGF0ZShmZWVkaW5nX2lkID0gcm93X251bWJlcigpKVxuXG5mZWVkaW5nICU+JSBcbiAgICBnZ3Bsb3QoKSArXG4gICAgYWVzKHkgPSBiaXJkX3R5cGUsIFxuICAgICAgICB4ID0gY291bnQsIGZpbGwgPSBiaXJkX3R5cGUpICtcbiAgICBnZW9tX2NvbChjb2xvdXIgPSBcXGJsYWNrXFwpICtcbiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSBcXG5vbmVcXCkgK1xuICAgIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDEsIDUsIDEwLCAxMDAsIDMwMCwgODAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygxLDgwMCksIFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFucyA9IFxcbG9nMTBcXCkgK1xuICAgIGxhYnMoeSA9IFxcXFxuIEJpcmQgTmFtZXNcXCxcbiAgICAgICAgIHggPSBcXE51bWJlciBvZiBCaXJkcyBTZWVuIEZlZWRpbmcgXFxuIExvZzEwIHNjYWxlXFwpICtcbiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBiaXJkcylcbmBgYFxuYGBgIn0= -->
```r
```r
feeding <- birds_21 %>%
group_by(bird_type) %>%
filter(str_detect(feeding, \YES\)) %>%
summarise(count = n()) %>%
mutate(feeding_id = row_number())
feeding %>%
ggplot() +
aes(y = bird_type,
x = count, fill = bird_type) +
geom_col(colour = \black\) +
theme(legend.position = \none\) +
scale_x_continuous(breaks = c(1, 5, 10, 100, 300, 800),
limits = c(1,800),
trans = \log10\) +
labs(y = \\n Bird Names\,
x = \Number of Birds Seen Feeding \n Log10 scale\) +
scale_fill_manual(values = birds)
<!-- rnb-source-end -->
<!-- rnb-plot-begin -->
<img src="data:image/png;base64,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" />
<!-- rnb-plot-end -->
<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuIyBsb2cxMCgpIGFzIDEgb3IgbW9yZSBiaXJkcyBhcmUgbGVzcyB0aGFuIDEwIGFuZCBkb24ndCBzaG93IG9uIG5vcm1hbCBncmFwaFxuYGBgXG5gYGAifQ== -->
```r
```r
# log10() as 1 or more birds are less than 10 and don't show on normal graph
<!-- rnb-source-end -->
<!-- rnb-chunk-end -->
<!-- rnb-text-begin -->
<!-- rnb-text-end -->
<!-- rnb-chunk-begin -->
<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxub25fc2hpcCA8LSAgYmlyZHNfMjEgJT4lIFxuICAgICAgICAgICAgICBncm91cF9ieShiaXJkX3R5cGUpICU+JSBcbiAgICAgICAgICAgICAgZmlsdGVyKHN0cl9kZXRlY3Qob25fc2hpcCwgXCJZRVNcIikpICU+JSBcbiAgICAgICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUgXG4gICAgICAgICAgICAgIG11dGF0ZShvbl9zaGlwX2lkID0gcm93X251bWJlcigpKVxuXG5vbl9zaGlwICU+JSBcbiAgICBnZ3Bsb3QoKSArXG4gICAgYWVzKHkgPSBiaXJkX3R5cGUsIFxuICAgICAgICB4ID0gY291bnQsIGZpbGwgPSBiaXJkX3R5cGUpICtcbiAgICBnZW9tX2NvbChjb2xvdXIgPSBcImJsYWNrXCIpICtcbiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSBcIm5vbmVcIikgK1xuICAgIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDEsIDIsIDMsIDUsIDcsIDEwLCA2MCksXG4gICAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoMSw2MCksIFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFucyA9IFwibG9nMTBcIikgK1xuICAgIGxhYnMoeSA9IFwiXFxuIEJpcmQgTmFtZXNcIixcbiAgICAgICAgIHggPSBcIk51bWJlciBvZiBCaXJkcyBTZWVuIE9uIFNoaXBcIikgK1xuICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGJpcmRzKVxuYGBgIn0= -->
```r
on_ship <- birds_21 %>%
group_by(bird_type) %>%
filter(str_detect(on_ship, "YES")) %>%
summarise(count = n()) %>%
mutate(on_ship_id = row_number())
on_ship %>%
ggplot() +
aes(y = bird_type,
x = count, fill = bird_type) +
geom_col(colour = "black") +
theme(legend.position = "none") +
scale_x_continuous(breaks = c(1, 2, 3, 5, 7, 10, 60),
limits = c(1,60),
trans = "log10") +
labs(y = "\n Bird Names",
x = "Number of Birds Seen On Ship") +
scale_fill_manual(values = birds)
```r
in_hand <- birds_21 %>%
group_by(bird_type) %>%
filter(str_detect(in_hand, \YES\)) %>%
summarise(count = n()) %>%
mutate(in_hand_id = row_number())
in_hand %>%
ggplot() +
aes(y = bird_type,
x = count, fill = bird_type) +
geom_col(colour = \black\) +
theme(legend.position = \none\) +
labs(y = \\n Bird Names\,
x = \Number of Birds Seen In Hand\) +
scale_fill_manual(values = birds)
<!-- rnb-source-end -->
<!-- rnb-plot-begin -->
<img src="data:image/png;base64,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" />
<!-- rnb-plot-end -->
<!-- rnb-chunk-end -->
<!-- rnb-text-begin -->
<!-- rnb-text-end -->
<!-- rnb-chunk-begin -->
<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuIyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNDI1NTUzMy9wcmV0dHktdGlja3MtZm9yLWxvZy1ub3JtYWwtc2NhbGUtdXNpbmctZ2dwbG90Mi1keW5hbWljLW5vdC1tYW51YWxcbiMgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDM5NzQ4OTIvZHluYW1pYy1saW1pdHMtYW5kLWJyZWFrcy1pbi1zY2FsZS15LWNvbnRpbnVvdXNcblxuXG5mbHlfYnkgPC0gIGJpcmRzXzIxICU+JSBcbiAgICAgICAgICAgICAgZ3JvdXBfYnkoYmlyZF90eXBlKSAlPiUgXG4gICAgICAgICAgICAgIGZpbHRlcihzdHJfZGV0ZWN0KGZseV9ieSwgXCJZRVNcIikpICU+JSBcbiAgICAgICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUgXG4gICAgICAgICAgICAgIG11dGF0ZShmbHlfYnlfaWQgPSByb3dfbnVtYmVyKCkpXG5cblxuIyBiYXNlX2JyZWFrcyA8LSBmdW5jdGlvbihuID0gMTApe1xuIyAgICAgZnVuY3Rpb24oeCkge1xuIyAgICAgICAgIGF4aXNUaWNrcyhsb2cxMChyYW5nZShmbHlfYnkkY291bnQsIG5hLnJtID0gVFJVRSkpLCBcbiMgICAgICAgICAgICAgICAgICAgbG9nID0gaWZfZWxzZShtYXgoZmx5X2J5JGNvdW50KSA+IDEwMDAsIFRSVUUsIEZBTFNFKSwgbiA9IG4pXG4jICAgICB9XG4jIH1cblxuIyBhc2QgPC0gaWZfZWxzZShtYXgoZmx5X2J5JGNvdW50KSA8IDEwMDAsIGMobGltaXRzPWMoMCxtYXgoZmx5X2J5JGNvdW50KSksIFxuIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtzICA9IHNlcSgwLG1heChmbHlfYnkkY291bnQpLFxuIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gcm91bmQobWF4KGZseV9ieSRjb3VudCkvNSkpKSwgXG4jICAgICAgICAgICAgICAgIGMobGltaXRzPWMoMCxtYXgoZmx5X2J5JGNvdW50KSksIFxuIyAgICAgICAgICAgICAgICAgIGJyZWFrcyAgPSBzZXEoMCxtYXgoZmx5X2J5JGNvdW50KSwgXG4jICAgICAgICAgICAgICAgICAgIGJ5ID0gcm91bmQobWF4KGZseV9ieSRjb3VudCkvNSkpLFxuIyAgICAgICAgICAgICAgICAgIHRyYW5zID0gXCJsb2cxMFwiKVxuIyAgICAgICAgICAgICAgICApXG5cbmZseV9ieSAlPiUgXG4gICAgZ2dwbG90KCkgK1xuICAgIGFlcyh5ID0gYmlyZF90eXBlLCBcbiAgICAgICAgeCA9IGNvdW50LCBmaWxsID0gYmlyZF90eXBlKSArXG4gICAgZ2VvbV9jb2woY29sb3VyID0gXCJibGFja1wiKSArXG4gICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gXCJub25lXCIpICtcbiAgICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzPWMoMCxtYXgoZmx5X2J5JGNvdW50KSksIFxuICAgICAgICAgICAgICAgICAgICAgICBicmVha3MgID0gYyhzZXEoMCxtYXgoZmx5X2J5JGNvdW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gKG1heChmbHlfYnkkY291bnQpLzUpKSksIHRyYW5zID0gXCJsb2cxMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICN2YWxpZGF0ZShtYXgoZmx5X2J5JGNvdW50KSA8IDEwMDAsIHRyYW5zID0gXCJsb2cxMFwiKVxuICAgICAgICAgICAgICAgICAgICAgICApICtcbiAgICBsYWJzKHkgPSBcIlxcbiBCaXJkIE5hbWVzXCIsXG4gICAgICAgICB4ID0gXCJOdW1iZXIgb2YgQmlyZHMgU2VlbiBGbHlpbmcgQllcXG4gTG9nMTAgc2NhbGVcIikgK1xuICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGJpcmRzKVxuYGBgIn0= -->
```r
# https://stackoverflow.com/questions/14255533/pretty-ticks-for-log-normal-scale-using-ggplot2-dynamic-not-manual
# https://stackoverflow.com/questions/43974892/dynamic-limits-and-breaks-in-scale-y-continuous
fly_by <- birds_21 %>%
group_by(bird_type) %>%
filter(str_detect(fly_by, "YES")) %>%
summarise(count = n()) %>%
mutate(fly_by_id = row_number())
# base_breaks <- function(n = 10){
# function(x) {
# axisTicks(log10(range(fly_by$count, na.rm = TRUE)),
# log = if_else(max(fly_by$count) > 1000, TRUE, FALSE), n = n)
# }
# }
# asd <- if_else(max(fly_by$count) < 1000, c(limits=c(0,max(fly_by$count)),
# breaks = seq(0,max(fly_by$count),
# by = round(max(fly_by$count)/5))),
# c(limits=c(0,max(fly_by$count)),
# breaks = seq(0,max(fly_by$count),
# by = round(max(fly_by$count)/5)),
# trans = "log10")
# )
fly_by %>%
ggplot() +
aes(y = bird_type,
x = count, fill = bird_type) +
geom_col(colour = "black") +
theme(legend.position = "none") +
scale_x_continuous(limits=c(0,max(fly_by$count)),
breaks = c(seq(0,max(fly_by$count),
by = (max(fly_by$count)/5))), trans = "log10"
#validate(max(fly_by$count) < 1000, trans = "log10")
) +
labs(y = "\n Bird Names",
x = "Number of Birds Seen Flying BY\n Log10 scale") +
scale_fill_manual(values = birds)
Error in seq.default(a, b, length.out = n + 1) :
'from' must be a finite number
breaks = c(1, 5, 10, 1000, 6000), limits = c(1,6000), trans = “log10”
variants <- birds_21 %>%
filter(bird_type == "Albatross") %>%
group_by(common_name) %>%
summarise(count = n())
variants %>%
ggplot() +
aes(y = common_name,
x = count, fill = common_name) +
geom_col(colour = "black") +
theme(legend.position = "none") +
scale_x_continuous(
trans = "log10") +
labs(y = "\n Bird Names",
x = "Number of Birds Seen Flying BY\n Log10 scale") +
scale_fill_manual(values = birds_pal)
```r
variants <- birds_21 %>%
filter(bird_type == \Booby\) %>%
group_by(common_name) %>%
summarise(count = n())
variants %>%
ggplot() +
aes(y = common_name,
x = count, fill = common_name) +
geom_col(colour = \black\) +
theme(legend.position = \none\) +
scale_x_continuous(
trans = \log10\) +
labs(y = \\n Bird Names\,
x = \Number of Birds Seen Flying BY\n Log10 scale\) +
scale_fill_manual(values = birds_pal)
<!-- rnb-source-end -->
<!-- rnb-plot-begin -->
<img src="data:image/png;base64,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" />
<!-- rnb-plot-end -->
<!-- rnb-chunk-end -->
<!-- rnb-text-begin -->
<!-- rnb-text-end -->
<!-- rnb-chunk-begin -->
<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxudmFyaWFudHMgPC0gYmlyZHNfMjEgJT4lIFxuICAgICAgICAgICAgICBmaWx0ZXIoYmlyZF90eXBlID09IFxcQ29ybW9yYW50XFwpICU+JSBcbiAgICAgICAgICAgICAgZ3JvdXBfYnkoY29tbW9uX25hbWUpICU+JSBcbiAgICAgICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKVxuICBcbnZhcmlhbnRzICU+JSBcbiAgICBnZ3Bsb3QoKSArXG4gICAgYWVzKHkgPSBjb21tb25fbmFtZSwgXG4gICAgICAgIHggPSBjb3VudCwgZmlsbCA9IGNvbW1vbl9uYW1lKSArXG4gICAgZ2VvbV9jb2woY29sb3VyID0gXFxibGFja1xcKSArXG4gICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gXFxub25lXFwpICtcbiAgICBzY2FsZV94X2NvbnRpbnVvdXMoIFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFucyA9IFxcbG9nMTBcXCkgK1xuICAgIGxhYnMoeSA9IFxcXFxuIEJpcmQgTmFtZXNcXCxcbiAgICAgICAgIHggPSBcXE51bWJlciBvZiBCaXJkcyBTZWVuIEZseWluZyBCWVxcbiBMb2cxMCBzY2FsZVxcKSArXG4gICAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYmlyZHNfcGFsKSBcbmBgYFxuYGBgIn0= -->
```r
```r
variants <- birds_21 %>%
filter(bird_type == \Cormorant\) %>%
group_by(common_name) %>%
summarise(count = n())
variants %>%
ggplot() +
aes(y = common_name,
x = count, fill = common_name) +
geom_col(colour = \black\) +
theme(legend.position = \none\) +
scale_x_continuous(
trans = \log10\) +
labs(y = \\n Bird Names\,
x = \Number of Birds Seen Flying BY\n Log10 scale\) +
scale_fill_manual(values = birds_pal)
<!-- rnb-source-end -->
<!-- rnb-plot-begin -->
<img src="data:image/png;base64,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" />
<!-- rnb-plot-end -->
<!-- rnb-chunk-end -->
<!-- rnb-text-begin -->
<!-- rnb-text-end -->
<!-- rnb-chunk-begin -->
<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxudmFyaWFudHMgPC0gYmlyZHNfMjEgJT4lIFxuICAgICAgICAgICAgICBmaWx0ZXIoYmlyZF90eXBlID09IFxcVHJvcGljYmlyZFxcKSAlPiUgXG4gICAgICAgICAgICAgIGdyb3VwX2J5KGNvbW1vbl9uYW1lKSAlPiUgXG4gICAgICAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSlcbiAgXG52YXJpYW50cyAlPiUgXG4gICAgZ2dwbG90KCkgK1xuICAgIGFlcyh5ID0gY29tbW9uX25hbWUsIFxuICAgICAgICB4ID0gY291bnQsIGZpbGwgPSBjb21tb25fbmFtZSkgK1xuICAgIGdlb21fY29sKGNvbG91ciA9IFxcYmxhY2tcXCkgK1xuICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9IFxcbm9uZVxcKSArXG4gICAgc2NhbGVfeF9jb250aW51b3VzKCkgK1xuICAgIGxhYnMoeSA9IFxcXFxuIEJpcmQgTmFtZXNcXCxcbiAgICAgICAgIHggPSBcXE51bWJlciBvZiBCaXJkcyBTZWVuIEZseWluZyBCWVxcbiBMb2cxMCBzY2FsZVxcKSArXG4gICAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYmlyZHNfcGFsKSBcbmBgYFxuYGBgIn0= -->
```r
```r
variants <- birds_21 %>%
filter(bird_type == \Tropicbird\) %>%
group_by(common_name) %>%
summarise(count = n())
variants %>%
ggplot() +
aes(y = common_name,
x = count, fill = common_name) +
geom_col(colour = \black\) +
theme(legend.position = \none\) +
scale_x_continuous() +
labs(y = \\n Bird Names\,
x = \Number of Birds Seen Flying BY\n Log10 scale\) +
scale_fill_manual(values = birds_pal)
<!-- rnb-source-end -->
<!-- rnb-plot-begin -->
<img src="data:image/png;base64,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" />
<!-- rnb-plot-end -->
<!-- rnb-chunk-end -->
<!-- rnb-text-begin -->
<!-- rnb-text-end -->
<!-- rnb-chunk-begin -->
<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuYGBgclxubGlicmFyeShzaGlueSlcbmxpYnJhcnkodGlkeXZlcnNlKVxubGlicmFyeShzaGlueXRoZW1lcylcblxuXG5zZWFiaXJkc19jbGVhbmVkX2RhdGEgPC0gcmVhZF9jc3YoXFxkYXRhL3NlYWJpcmRzX2NsZWFuZWRfZGF0YS5jc3ZcXClcbmBgYFxuYGBgXG5gYGAifQ== -->
```r
```r
```r
library(shiny)
library(tidyverse)
library(shinythemes)
seabirds_cleaned_data <- read_csv(\data/seabirds_cleaned_data.csv\)
Warning: package ‘leaflet’ was built under R version 4.1.2
# birds_9 <- seabirds_cleaned_data %>%
# group_by(common_name) %>%
# mutate(common_name = if_else(str_detect(common_name,
# "(?i)shearwater"),"Shearwater",
# common_name),
# common_name = if_else(str_detect(common_name,
# "(?i)albatross"), "Albatross",
# common_name),
# common_name = if_else(str_detect(common_name,
# "(?i)mollymawk"), "Mollymawk",
# common_name),
# common_name = if_else(str_detect(common_name,
# "(?i)petrel"), "Petrel",
# common_name),
# common_name = if_else(str_detect(common_name,
# "(?i)prion"), "Prion",
# common_name),
# common_name = if_else(str_detect(common_name,
# "(?i)skua"), "Skua",
# common_name),
# common_name = if_else(str_detect(common_name,
# "(?i)penguin"), "Penguin",
# common_name),
# common_name = if_else(str_detect(common_name,
# "(?i)Red-tailed tropicbird"),
# "Red-tailed tropicbird",
# common_name),
# common_name = if_else(str_detect(common_name,
# "(?i)Brown noddy"), "Brown noddy",
# common_name)
# ) %>%
# filter(common_name %in% c("Shearwater", "Albatross",
# "Mollymawk", "Petrel",
# "Prion", "Skua",
# "Penguin", "Brown noddy",
# "Red-tailed tropicbird"))
# pal <- c("Shearwater" = "grey", "Albatross" = "blue",
# "Mollymawk" = "yellow", "Petrel" = "green",
# "Prion" = "pink", "Skua" = "purple",
# "Penguin" = "orange", "Brown noddy" = "brown",
# "Red-tailed tropicbird" = "red")
# names(birds_9)
# head(birds_9)
# birds_9 %>%
# group_by(common_name) %>%
# mutate(feeding = if_else(feeding %in% "YES", 1, 0),
# on_ship = if_else(on_ship %in% "YES", 1, 0),
# in_hand = if_else(in_hand %in% "YES", 1, 0),
# fly_by = if_else(fly_by %in% "YES", 1, 0)) %>%
# summarise(sighting_count = sum(total_sighting, na.rm = TRUE),
# feeding_count = sum(feeding, na.rm = TRUE),
# on_ship_count = sum(on_ship, na.rm = TRUE),
# in_hand_count = sum(in_hand, na.rm = TRUE),
# fly_by_count = sum(fly_by, na.rm = TRUE))
```r
tail(position)
<!-- rnb-source-end -->
<!-- rnb-frame-begin eyJtZXRhZGF0YSI6eyJjbGFzc2VzIjpbInRibF9kZiIsInRibCIsImRhdGEuZnJhbWUiXSwibnJvdyI6NiwibmNvbCI6Mywic3VtbWFyeSI6eyJBIHRpYmJsZSI6IjYgeCAzIn19LCJyZGYiOiJINHNJQUFBQUFBQUFCbDFSUFVqRFFCaTlORWxMZ3kwRjkwNnVEZGdpT0VsS1JjbGsvYVhySlkyMUdPOUtla1hwMU1WQkVKZmlySXZvN0dMSDBPTHFMQzdPeFZVWGhjYTdTdzdhQ3h6ZisxN2U5NyszMmFnWURRTUFvQUpOVVlDcVV3alN0ZnBxZWEwTWdKYWluZ0kwa0dYMmdxcVd1UlNvZVNhcmpxK3dSVUYxZkxNMDRQYWhHREk3ZVRsS2JNVDV5ZWlKNmFTRU91bGo1RkZRbUNQVnc0T2FySE45Mk8wbXVsUkNadW83KzNiREpZbWI1aTZoYUVZZjd5NnM4WklnckVyV2ZpMk9kcjh1dysxUCsvdk8vZ20zOHNQcHhuQXE0aXg0ejNXVzg3NW8zVDdKUFZvZmx2TzNrcmw5ZTdhYzZ6aWgxQzJDWjU3b1ZrMUlyUW1KSnliMG9laGE4ekZxU2ZIWkFKK2JJa2VPVGN4V0dFWFJieXhVSTJsakJzME56ZU9BaHNUakw2VEw0QTVwWTBTVHBkanRkQ2xZQ1NTaTBFT3NlTFBrbnZUUWFhbXl6aXJ3Ly9HWFMzQjZEcXR4VFUxMHBvdWplS2pWUm1KdTNZZU81eWRPbms3Smh6UTdRUnVKZlJpVTdab0VFeWgwaG90OXdjUzNuZjBEZDdmbUQ3UUNBQUE9In0= -->
<div data-pagedtable="false">
<script data-pagedtable-source type="application/json">
{"columns":[{"label":["date"],"name":[1],"type":["S3: POSIXct"],"align":["right"]},{"label":["lat"],"name":[2],"type":["dbl"],"align":["right"]},{"label":["long"],"name":[3],"type":["dbl"],"align":["right"]}],"data":[{"1":"1989-09-17","2":"-38.00000","3":"141.0000"},{"1":"1989-09-24","2":"-34.00000","3":"150.7500"},{"1":"1989-10-29","2":"-34.00000","3":"150.7500"},{"1":"1990-12-19","2":"-51.54000","3":"155.8267"},{"1":"1990-12-20","2":"-47.74444","3":"151.8481"},{"1":"1990-12-21","2":"-44.11389","3":"148.3750"}],"options":{"columns":{"min":{},"max":[10],"total":[3]},"rows":{"min":[10],"max":[10],"total":[6]},"pages":{}}}
</script>
</div>
<!-- rnb-frame-end -->
<!-- rnb-chunk-end -->
<!-- rnb-text-begin -->
<!-- rnb-text-end -->
<!-- rnb-chunk-begin -->
<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuXG4gIGxlYWZsZXQoZGF0YSA9IGJpcmRzXzIxKSAlPiVcbiAgYWRkVGlsZXMoKSAlPiUgICMgQWRkIGRlZmF1bHQgT3BlblN0cmVldE1hcCBtYXAgdGlsZXNcbiAgYWRkTWFya2VycyhsYWJlbCA9IGJpcmRzXzIxJGNvbW1vbl9uYW1lLCBjbHVzdGVyT3B0aW9ucyA9IG1hcmtlckNsdXN0ZXJPcHRpb25zKCkpIFxuYGBgIn0= -->
```r
leaflet(data = birds_21) %>%
addTiles() %>% # Add default OpenStreetMap map tiles
addMarkers(label = birds_21$common_name, clusterOptions = markerClusterOptions())
Assuming "long" and "lat" are longitude and latitude, respectively
Warning in validateCoords(lng, lat, funcName) :
Data contains 30 rows with either missing or invalid lat/lon values and will be ignored
# Print the map
-45.91667 165.4000
seabirds_cleaned_data
ship_data <- read_excel(here("raw_data/seabirds.xls"),
sheet = "Ship data by record ID") %>%
clean_names()
position <- ship_data %>%
select(date, lat, long) %>%
filter(!is.na(lat),
!is.na(long)) %>%
group_by(date) %>%
summarise_if(is.numeric, mean)
position
ship_data %>%
select(date, lat, long) %>%
filter(is.na(date))
```r
library(dplyr)
library(shiny)
library(leaflet)
library(readxl)
library(RColorBrewer)
library(maps)
library(leaflet.extras)
library(htmlwidgets)
data_dots = read_csv(\test4.csv\)
<!-- rnb-source-end -->
<!-- rnb-output-begin eyJkYXRhIjoiUm93czogOCBDb2x1bW5zOiAxNFxuLS0gQ29sdW1uIHNwZWNpZmljYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuRGVsaW1pdGVyOiBcXFxuIn0= -->
Rows: 8 Columns: 14 – Column specification ————————————————————————————————————————————————————- Delimiter:
<!-- rnb-output-end -->
<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxudWkgPC0gYm9vdHN0cmFwUGFnZShcbiAgdGFncyRzdHlsZSh0eXBlID0gXFx0ZXh0L2Nzc1xcLCBcXGh0bWxcbmBgYCJ9 -->
```r
```r
ui <- bootstrapPage(
tags$style(type = \text/css\, \html
Warning: Couldn't coerce the `end` argument to a date string with format yyyy-mm-dd
```r
server <- function(input, output) {
#n <- 60
qual_col_pals = brewer.pal.info[brewer.pal.info$category == 'qual', ]
col_vector = unlist(mapply(brewer.pal, qual_col_pals$maxcolors, rownames(qual_col_pals)))
myMap = leaflet(\map\) %>%
addTiles(group = \Base\) %>%
addProviderTiles(providers$CartoDB.Positron, group = \Grey\) %>%
addResetMapButton()
rv <- reactiveValues(
filteredData =data_dots,
ids = unique(data_dots$Route)
)
observeEvent(input$dateRange,
{rv$filteredData = data_dots[as.Date(data_dots$ship_date) >= input$dateRange[1] & as.Date(data_dots$ship_date) <= input$dateRange[2],]
rv$ids = unique(rv$filteredData$Route)
}
)
# Initiate the map
output$map <- renderLeaflet({
for (i in rv$ids) {
#print(i)
myMap = myMap %>%
addPolylines(
data = subset(rv$filteredData, Route == i),
weight = 3,
color = sample(col_vector, 1),
opacity = 0.8,
smoothFactor = 1,
lng = ~Dlong,
lat = ~Dlat,
highlight = highlightOptions(
weight = 5,
color = \blue\,
bringToFront = TRUE
),
label = ~ as.character(ShipmentID),
popup = ~ as.character(ShipmentID),
group = \test\
)
}
myMap
})
}
shinyApp(ui = ui, server = server)
<!-- rnb-source-end -->
<!-- rnb-output-begin eyJkYXRhIjoiXG5MaXN0ZW5pbmcgb24gaHR0cDovLzEyNy4wLjAuMTo0Mjc3XG5XYXJuaW5nOiBFcnJvciBpbiBjaGFyVG9EYXRlOiBjaGFyYWN0ZXIgc3RyaW5nIGlzIG5vdCBpbiBhIHN0YW5kYXJkIHVuYW1iaWd1b3VzIGZvcm1hdFxuICBbTm8gc3RhY2sgdHJhY2UgYXZhaWxhYmxlXVxuTkFcbiJ9 -->
Listening on http://127.0.0.1:4277 Warning: Error in charToDate: character string is not in a standard unambiguous format [No stack trace available] NA
<!-- rnb-output-end -->
<!-- rnb-chunk-end -->
<!-- rnb-text-begin -->
<!-- rnb-text-end -->
<!-- rnb-chunk-begin -->
<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuZGF0YV9kb3RzICU+JSBcbiAgbXV0YXRlKHNoaXBfZGF0ZSA9IGFzLkRhdGUoc2hpcF9kYXRlLCBcXCV5LyVtLyVkXFwpLFxuICAgICAgICAgZGVsaXZlcnlfZGF0ZSA9IGFzLkRhdGUoZGVsaXZlcnlfZGF0ZSwgXFwleS8lbS8lZFxcKSlcbmBgYFxuYGBgIn0= -->
```r
```r
data_dots %>%
mutate(ship_date = as.Date(ship_date, \%y/%m/%d\),
delivery_date = as.Date(delivery_date, \%y/%m/%d\))
<!-- rnb-source-end -->
<!-- rnb-frame-begin eyJtZXRhZGF0YSI6eyJjbGFzc2VzIjpbInNwZWNfdGJsX2RmIiwidGJsX2RmIiwidGJsIiwiZGF0YS5mcmFtZSJdLCJucm93Ijo4LCJuY29sIjoxNCwic3VtbWFyeSI6eyJBIHRpYmJsZSI6IjggeCAxNCJ9fSwicmRmIjoiSDRzSUFBQUFBQUFBQnJWVlM0L1NVQlMrdEhTbVZDRWsvZ0dXSmdZeUxSM0hXZGtDbXFnNG5RQUxGZ2JzUUoxcDdMVFlGblJNZk96VWxmRWZHRmN1WEJvVGQ0MExkYUVyLzhpc0JsZUQ5N1k5bEpaQkVxSTN1VDNQKzUzSGJVOGJ0WGFaYTNNSUlScWxVeWxFTTVoRmE5VmRYdGdVRUVwVFdFcWhOTW9RK2doN1hjQk1EdTg4M214b29QbmlSc1R5RVN0RWJEbGlSV0NGNkpnUUhSUHdNVVNUR095elk1TE4rcnRWYWFJQXBtZW9qaE1tRDhwMFRYVTFURS8vYlZCcXNqaE9ySG5zOVRyUGI0bGRjWUdjSWZLVnpTNi9NYXU0dkIwcEZpR1VsOHJ4VE5aa1k2UTdWaWlkYThvN0xibFFyY3NOT1ZUbHJzbk5WbUZYcmlzRnVkNVNRaTJISFF0VnVWRlhtbWNDTFlVRmgrREZZcVV4LzVaMFVocUxJV1g4emtvbjQ3dUJEUGFrWHlBRGp0ZDVPdnIrY2J2dGRaNThlWDNuNG9uWGVTbS8ycnIxemV1OHdlVHIrOGllOUF2a2FUNlZUeTh1VWVkdlNwVVBQL0Q2S1ZVK3QvTjd0MzlKRmM4UEZ0bVRmb0VNT0ZlUGcrU1dVUW1kVFFFSGhEbi8wQ0xsVVd3bC9kRGZidjEvU25QM3V4cEZjL2U3R2tWejk3c2FUUTRaVXozVVlNams0T1Bmd1VyNGZwMERmZER0azJrUUtMSjl6ZEJIbW4wMHErU2EyT3RRTTkwYk5RQ3U5WFQzYURwTkh1dURxY0d3elAycHdWQmRNRFNzNFJTUWJtb1A0RUlVVzkvWFRUaWh6RUFwczFBS2dZcFhsN0d0aHlXb01JczM5UncvSnBQSjd3VmpqOE0xcWFWN05xbmZIMzR4dUhWcjRPcVdpY0VvOG1OaEVvZFRka0tSSDVva2VML1lPeGlhOTR0bGtVVHc3Y0hLaGp3N3crZUNtRFJreGtBWE5CTTNBZHJER09xZVpzQ2d3MVg2UlpZR3RtNUNPem1zZFVxdTVhcmd4L1VzQXpUQlpELzlBekdsamI5UkJ3QUEifQ== -->
<div data-pagedtable="false">
<script data-pagedtable-source type="application/json">
{"columns":[{"label":["Name"],"name":[1],"type":["chr"],"align":["left"]},{"label":["ship_date"],"name":[2],"type":["date"],"align":["right"]},{"label":["delivery_date"],"name":[3],"type":["date"],"align":["right"]},{"label":["ShipmentID"],"name":[4],"type":["chr"],"align":["left"]},{"label":["Dcity"],"name":[5],"type":["chr"],"align":["left"]},{"label":["Dzip"],"name":[6],"type":["dbl"],"align":["right"]},{"label":["Dlong"],"name":[7],"type":["dbl"],"align":["right"]},{"label":["Dlat"],"name":[8],"type":["dbl"],"align":["right"]},{"label":["Route"],"name":[9],"type":["dbl"],"align":["right"]},{"label":["Seq"],"name":[10],"type":["dbl"],"align":["right"]},{"label":["Origin"],"name":[11],"type":["chr"],"align":["left"]},{"label":["Ozip"],"name":[12],"type":["dbl"],"align":["right"]},{"label":["Olong"],"name":[13],"type":["dbl"],"align":["right"]},{"label":["Olat"],"name":[14],"type":["dbl"],"align":["right"]}],"data":[{"1":"1-0","2":"<NA>","3":"<NA>","4":"FL1174_4","5":"Alviso","6":"95002","7":"-121.976","8":"37.426","9":"1","10":"0","11":"Alviso","12":"95002","13":"-121.976","14":"37.426"},{"1":"1-1","2":"<NA>","3":"<NA>","4":"FL1174_4","5":"SANTA CLARA","6":"95050","7":"-121.965","8":"37.350","9":"1","10":"1","11":"Alviso","12":"95002","13":"-121.976","14":"37.426"},{"1":"1-2","2":"<NA>","3":"<NA>","4":"FL1185_10","5":"EAST PALO ALTO","6":"94303","7":"-122.129","8":"37.448","9":"1","10":"2","11":"Alviso","12":"95002","13":"-121.976","14":"37.426"},{"1":"1-3","2":"<NA>","3":"<NA>","4":"FL1169_10","5":"SAN CARLOS","6":"94070","7":"-122.274","8":"37.500","9":"1","10":"3","11":"Alviso","12":"95002","13":"-121.976","14":"37.426"},{"1":"1-4","2":"<NA>","3":"<NA>","4":"FL1174_4","5":"Alviso","6":"95002","7":"-121.976","8":"37.426","9":"1","10":"4","11":"Alviso","12":"95002","13":"-121.976","14":"37.426"},{"1":"2-0","2":"<NA>","3":"<NA>","4":"FL1174_3","5":"Alviso","6":"95002","7":"-121.976","8":"37.426","9":"2","10":"0","11":"Alviso","12":"95002","13":"-121.976","14":"37.426"},{"1":"2-1","2":"<NA>","3":"<NA>","4":"FL1174_3","5":"SANTA CLARA","6":"95050","7":"-121.965","8":"37.350","9":"2","10":"1","11":"Alviso","12":"95002","13":"-121.976","14":"37.426"},{"1":"2-2","2":"<NA>","3":"<NA>","4":"FL1174_3","5":"Alviso","6":"95002","7":"-121.976","8":"37.426","9":"2","10":"2","11":"Alviso","12":"95002","13":"-121.976","14":"37.426"}],"options":{"columns":{"min":{},"max":[10],"total":[14]},"rows":{"min":[10],"max":[10],"total":[8]},"pages":{}}}
</script>
</div>
<!-- rnb-frame-end -->
<!-- rnb-chunk-end -->
<!-- rnb-text-begin -->
# https://kateto.net/network-visualization
# https://stackoverflow.com/questions/38432788/how-do-i-visualise-multiple-routes-using-leaflet-in-r
<!-- rnb-text-end -->
<!-- rnb-chunk-begin -->
<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuIyBodHRwczovL3JzdHVkaW8uZ2l0aHViLmlvL2xlYWZsZXQvbWFya2Vycy5odG1sXG4jIGZpcnN0IDIwIHF1YWtlc1xuZGYuMjAgPC0gcXVha2VzWzE6MjAsXVxuXG5nZXRDb2xvciA8LSBmdW5jdGlvbihxdWFrZXMpIHtcbiAgc2FwcGx5KHBvc2l0aW9uJGRhdGUsIGZ1bmN0aW9uKGRhdGUpIHtcbiAgaWYoZGF0ZSA8PSAxOTc5LTEyLTMxKSB7XG4gICAgXCJncmVlblwiXG4gIH0gZWxzZSBpZihkYXRlIDw9IDE5ODktMTItMzEpIHtcbiAgICBcIm9yYW5nZVwiXG4gIH0gZWxzZSB7XG4gICAgXCJyZWRcIlxuICB9IH0pXG59XG5cbmljb25zIDwtIGF3ZXNvbWVJY29ucyhcbiAgaWNvbiA9ICdpb3MtY2xvc2UnLFxuICBpY29uQ29sb3IgPSAnYmxhY2snLFxuICBsaWJyYXJ5ID0gJ2lvbicsXG4gIG1hcmtlckNvbG9yID0gZ2V0Q29sb3IocG9zaXRpb24pXG4pXG5cbmxlYWZsZXQocG9zaXRpb24pICU+JSBhZGRUaWxlcygpICU+JVxuICBhZGRBd2Vzb21lTWFya2Vycyh+bG9uZywgfmxhdCwgaWNvbj1pY29ucywgbGFiZWw9fmFzLmNoYXJhY3RlcihkYXRlKSlcbmBgYCJ9 -->
```r
# https://rstudio.github.io/leaflet/markers.html
# first 20 quakes
df.20 <- quakes[1:20,]
getColor <- function(quakes) {
sapply(position$date, function(date) {
if(date <= 1979-12-31) {
"green"
} else if(date <= 1989-12-31) {
"orange"
} else {
"red"
} })
}
icons <- awesomeIcons(
icon = 'ios-close',
iconColor = 'black',
library = 'ion',
markerColor = getColor(position)
)
leaflet(position) %>% addTiles() %>%
addAwesomeMarkers(~long, ~lat, icon=icons, label=~as.character(date))
getColor <- function(quakes) {
sapply(position$date, function(date) {
if(date %in% "^196") {
"green"
} else if(date %in% "^197") {
"orange"
} else if(date %in% "^198") {
"blue"
} else {
"red"
} })
}
icons <- awesomeIcons(
icon = 'ios-close',
iconColor = 'black',
library = 'ion',
markerColor = getColor(position)
)
leaflet(position) %>% addTiles() %>%
addAwesomeMarkers(~long, ~lat, icon=icons, label=~as.character(date))
getColor <- function(quakes) {
sapply(position$date, function(date) {
case_when(str_detect(date,
regex("^196",
ignore_case = TRUE)) ~ "green",
str_detect(date,
regex("^197",
ignore_case = TRUE)) ~ "orange",
str_detect(date,
regex("^198",
ignore_case = TRUE)) ~ "blue",
str_detect(date,
regex("^199",
ignore_case = TRUE)) ~ "red"
) })
}
icons <- awesomeIcons(
icon = 'ios-close',
iconColor = 'black',
library = 'ion',
markerColor = getColor(position)
)
leaflet(position) %>% addTiles() %>%
addAwesomeMarkers(~long, ~lat, icon=icons, label=~as.character(date))
# https://stackoverflow.com/questions/56362519/how-to-filter-date-range-for-routes-in-r-leaflet-shiny-app
library(dplyr)
library(shiny)
library(leaflet)
library(readxl)
library(RColorBrewer)
library(maps)
library(leaflet.extras)
library(htmlwidgets)
data_dots = read_csv("test4.csv")
ui <- bootstrapPage(
tags$style(type = "text/css", "html, body {width:100%;height:100%}"),
leafletOutput("map", width = "100%", height = "100%"),
absolutePanel(top = 10, right = 10,
dateRangeInput("dateRange", "Date Range Input", start = min(data_dots$ship_date), end = max(data_dots$ship_date))
)
)
server <- function(input, output) {
#n <- 60
qual_col_pals = brewer.pal.info[brewer.pal.info$category == 'qual', ]
col_vector = unlist(mapply(brewer.pal, qual_col_pals$maxcolors, rownames(qual_col_pals)))
myMap = leaflet("map") %>%
addTiles(group = "Base") %>%
addProviderTiles(providers$CartoDB.Positron, group = "Grey") %>%
addResetMapButton()
rv <- reactiveValues(
filteredData =data_dots,
ids = unique(data_dots$Route)
)
observeEvent(input$dateRange,
{rv$filteredData = data_dots[as.Date(data_dots$ship_date) >= input$dateRange[1] & as.Date(data_dots$ship_date) <= input$dateRange[2],]
rv$ids = unique(rv$filteredData$Route)
}
)
# Initiate the map
output$map <- renderLeaflet({
for (i in rv$ids) {
#print(i)
myMap = myMap %>%
addPolylines(
data = subset(rv$filteredData, Route == i),
weight = 3,
color = sample(col_vector, 1),
opacity = 0.8,
smoothFactor = 1,
lng = ~Dlong,
lat = ~Dlat,
highlight = highlightOptions(
weight = 5,
color = "blue",
bringToFront = TRUE
),
label = ~ as.character(ShipmentID),
popup = ~ as.character(ShipmentID),
group = "test"
)
}
myMap
})
}
shinyApp(ui = ui, server = server)
data_dots %>%
mutate(ship_date = as.Date(ship_date, "%y/%m/%d"),
delivery_date = as.Date(delivery_date, "%y/%m/%d"))